From: Florian Müllner Date: Wed, 18 Sep 2013 15:53:26 +0000 (+0200) Subject: keyring: Don't unregister the prompt when disabled X-Git-Tag: archive/raspbian/50.5-1+rpi1~1^2~1013^2^2~3362 X-Git-Url: https://dgit.raspbian.org/%22http://www.example.com/cgi/%22/%22http:/www.example.com/cgi/%22?a=commitdiff_plain;h=1242a16265d5bf2;p=gnome-shell.git keyring: Don't unregister the prompt when disabled gnome-keyring provides a fallback in case our builtin prompt fails to register, so keyring dialogs may still pop up even when they are supposed to be disabled. Instead, keep the prompt registered but cancel requests immediately while disabled. https://bugzilla.gnome.org/show_bug.cgi?id=708187 --- diff --git a/js/ui/components/keyring.js b/js/ui/components/keyring.js index a1a626798..b17e9bde6 100644 --- a/js/ui/components/keyring.js +++ b/js/ui/components/keyring.js @@ -223,27 +223,50 @@ const KeyringDialog = new Lang.Class({ }, }); +const KeyringDummyDialog = new Lang.Class({ + Name: 'KeyringDummyDialog', + + _init: function() { + this.prompt = new Shell.KeyringPrompt(); + this.prompt.connect('show-password', + Lang.bind(this, this._cancelPrompt)); + this.prompt.connect('show-confirm', Lang.bind(this, + this._cancelPrompt)); + }, + + _cancelPrompt: function() { + this.prompt.cancel(); + } +}); + const KeyringPrompter = new Lang.Class({ Name: 'KeyringPrompter', _init: function() { this._prompter = new Gcr.SystemPrompter(); - this._prompter.connect('new-prompt', function(prompter) { - let dialog = new KeyringDialog(); - return dialog.prompt; - }); + this._prompter.connect('new-prompt', Lang.bind(this, + function() { + let dialog = this._enabled ? new KeyringDialog() + : new KeyringDummyDialog(); + return dialog.prompt; + })); this._dbusId = null; + this._registered = false; + this._enabled = false; }, enable: function() { - this._prompter.register(Gio.DBus.session); - this._dbusId = Gio.DBus.session.own_name('org.gnome.keyring.SystemPrompter', - Gio.BusNameOwnerFlags.ALLOW_REPLACEMENT, null, null); + if (!this._registered) { + this._prompter.register(Gio.DBus.session); + this._dbusId = Gio.DBus.session.own_name('org.gnome.keyring.SystemPrompter', + Gio.BusNameOwnerFlags.ALLOW_REPLACEMENT, null, null); + this._registered = true; + } + this._enabled = true; }, disable: function() { - this._prompter.unregister(false); - Gio.DBus.session.unown_name(this._dbusId); + this._enabled = false; } });